'use strict'
/**
 * 渠道后台 - 配置
 * 配置@根路径-vue-cli@3 已经默认@
 */
const path = require('path')
function resolve(dir) {
  return path.join(__dirname, dir)
}
/** vue-cli 3.x配置文件 */

// const name = '后台管理' // title
const port = process.env.port || 9500 // 端口
const CompressionPlugin = require('compression-webpack-plugin') //Gzip
// const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin //Webpack包文件分析器

module.exports = {
  publicPath: '/',
  outputDir: 'dist',
  assetsDir: 'static',
  lintOnSave: process.env.NODE_ENV === 'development',
  productionSourceMap: false, // 生产环境不产生未加密的map文件
  devServer: { // 开发环境 -- 配置
    host: '0.0.0.0',
    port: port,
    open: true,
    hotOnly: true, // 热更新
    overlay: {
      warnings: false,
      errors: true
    },
    disableHostCheck: true, // 配置host-自定义域名
    proxy: {
      // change xxx-api/login => mock/login
      // detail: https://cli.vuejs.org/config/#devserver-proxy
      [process.env.VUE_APP_BASE_API]: {
        target: `http://127.0.0.1:${port}/mock`,
        changeOrigin: true,
        pathRewrite: {
          ['^' + process.env.VUE_APP_BASE_API]: ''
        }
      },
      '/api': {
        target: 'http://localhost:9090', // 后端接口地址
        // target: 'http://192.168.2.100:9090', // 后端接口地址
        changeOrigin: true, // 是否允许跨越
        pathRewrite: {
          // '^/api': '/', // 重写,
        }
      }
      // after: require('./mock/mock-server.js') // 本地数据
    }
  },
  chainWebpack: config => { // Webpack 相关配置 alias 配置
    config.entry('main').add('babel-polyfill') // 编译es5检测
    // config.resolve.alias.set('@', resolve('src')) // 配置根路径
    config.module.rules.delete('svg') // 移除默认svg img文件下
    config.module
      .rule('svg-comm')
      .test(/.svg$/)
      .include.add(resolve('src/icons/svg'))
      .end()
      .use('svg-sprite-loader')
      .loader('svg-sprite-loader')
      .options({
        symbolId: 'icon-[name]'
      })
      .end()
  },
  // configureWebpack: { // Webpack 相关配置
  //   name: name,
  //   resolve: {
  //     // extensions: ['.js', '.vue', '.json', '.jsx', '.css', '.scss'],
  //     alias: {
  //       '@': resolve('src')
  //     }
  //   }
  // },
  configureWebpack: config => { // 函数方式 - 配置Webpack
    if (process.env.NODE_ENV === 'production') { //生产环境
      // 插件-额外
      let pluginsPro = [
        // 文件开启Gzip，也可以通过服务端(如：nginx)(https://github.com/webpack-contrib/compression-webpack-plugin)
        new CompressionPlugin({
          filename: '[path].gz[query]', // 目标资源名称。[file] 会被替换成原资源。[path] 会被替换成原资源路径，[query] 替换成原查询字符串
          algorithm: 'gzip', // 算法
          test: new RegExp('\\.(' + ['js', 'css'].join('|') + ')$'), // 压缩 js 与 css
          threshold: 10240, // 只处理比这个值大的资源。按字节计算10240 = 10k
          minRatio: 0.8 // 只有压缩率比这个值小的资源才会被处理
          // deleteOriginalAssets: true // 是否删除原文件
        })
        // ,
        // Webpack包文件分析器(https://github.com/webpack-contrib/webpack-bundle-analyzer)
        // new BundleAnalyzerPlugin()
      ]
      // 合并wabpack插件
      config.plugins = [...config.plugins, ...pluginsPro]
    }
  },
  css: { // css 相关配置
    modules: false, // 启用 CSS modules
    extract: true, // 是否使用css分离插件
    sourceMap: false, // 开启 CSS source maps，一般不建议开启
    loaderOptions: { // css预设器配置项
      sass: {}
    }
  },
  transpileDependencies: [ // 需要编译的第三方-依赖包名(polyfill)
    'vue2-verify'
  ]
}
